// 整数排序
#[test]
fn int_sort() {
    let mut vec = vec![1, 5, 10, 2, 15];
    vec.sort();
    println!("{:?}", vec);
}

// 浮点数排序
#[test]
fn float_sort() {
    let mut vec = vec![1.0, 5.0, 3.0];
    // vec.sort(); 没有为 `f64` 实现特征 `FnPtr` [E0277]
    vec.sort_by(|a, b| a.partial_cmp(b).unwrap());
    println!("{:?}", vec);
}

// 结构体排序
#[derive(Debug, Eq, Ord, PartialEq, PartialOrd)]
struct Person {
    name: String,
    age: u32,
}

impl Person {
    fn new(name: String, age: u32) -> Self {
        Person { name, age }
    }
}

#[test]
fn struct_sort() {
    let mut persons = vec![
        Person::new("A张三".to_string(), 18),
        Person::new("C李四".to_string(), 28),
        Person::new("B王五".to_string(), 38),
    ];

    // 根据获得的自然顺序（name 和 age）对 people 进行排序
    persons.sort();
    println!("{:?}", persons);

    // 根据age排序
    persons.sort_by(|a, b| a.age.cmp(&b.age));
    println!("{:?}", persons);
}

fn main() {}
